package org.farm2.tools.caches;

/**
 * 缓存key
 */
public enum FarmCacheKeys {
    //缓存当前登录用户
    LOGIN_USER("登录用户", 5000, NONE(), hour(3)),
    //在线用户
    ONLINE_USER("在线用户", 5000, NONE(), minutes(30)),
    // 缓存系统参数
    PARAMETER("系统参数", 5000, NONE(), hour(3)),
    // 加密盐缓存
    SALT("加密盐", 5000, minutes(1), NONE()),
    //登录校验错误次数
    LOGIN_ERROR_NUM("登录校验错误次数", 5000, NONE(), minutes(10)),
    //图片验证码
    LOGIN_IMG_CODES("缓存的登录验证码", 5000, NONE(), minutes(2)),
    //刷新令牌使用量(目的为了放置过度使用)
    JWT_REFRESH_KES("JWT刷新次数", 5000, NONE(), minutes(10)),
    //客户端访问计数器
    CLIENT_VISIT_COUNTER("客户端访问计数器", 10000, minutes(1), NONE()),
    //附件信息 ResourceFile
    RESOURCE_FILE("附件信息", 3000, NONE(), hour(8)),
    //扩展文件 用于预览
    EXTEND_FILE("扩展文件信息", 3000, NONE(), hour(8)),
    //扩展文件 用于预览
    TALK_MSG("AI会话信息缓存", 3000, NONE(), hour(2)),
    //扩展文件 用于预览
    PROCESS("处理进度", 1000, minutes(10), NONE()),
    ;

    private String title;
    private Integer maxNum;
    private Integer liveSeconds;
    private Integer idleSeconds;

    /**
     * @param title 缓存描述
     * @param maxNum 最大缓存条目
     * @param liveSeconds 根据存入时间过期（TTL）
     * @param idleSeconds 根据最后一次访问时间过期（TTI）
     */
    FarmCacheKeys(String title, int maxNum, int liveSeconds, int idleSeconds) {
        this.title = title;
        this.maxNum = maxNum;
        this.liveSeconds = liveSeconds;
        this.idleSeconds = idleSeconds;
    }

    private static int minutes(int minute) {
        return minute * 60;
    }

    private static int second(int second) {
        return second;
    }

    private static int hour(int hour) {
        return minutes(hour * 60);
    }

    private static int NONE() {
        return -1;
    }

    public Integer getIdleSeconds() {
        return idleSeconds;
    }

    public Integer getMaxNum() {
        return maxNum;
    }

    public Integer getLiveSeconds() {
        return liveSeconds;
    }

    public String getTitle() {
        return title;
    }
}
